package com.base.cn.platform.os.service.op.article;

import com.base.cn.platform.os.common.mybatis.BaseBiz;
import com.base.cn.platform.os.common.mybatis.Pagination;
import com.base.cn.platform.os.common.utils.DataUtil;
import com.base.cn.platform.os.common.utils.ObjectUtils;
import com.base.cn.platform.os.common.utils.StringUtils;
import com.base.cn.platform.os.dao.op.article.OpArticleTypeDao;
import com.base.cn.platform.os.entity.op.article.OpArticleType;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 资讯类型Biz
 * @author zsw
 * @create 2018/5/7
 */
@Service
public class OpArticleTypeBiz extends BaseBiz<OpArticleType,OpArticleTypeDao> {

    /**
     * 查询资讯类型
     * @param page 当前页数
     * @param articleType 资讯类型实体
     * @return
     */
    public PageInfo<OpArticleType> queryArticleTypeList(Pagination page, OpArticleType articleType){
        String whereSql = this.getWhereSql(articleType);
        return this.findPage(whereSql,page,null);
    }

    /**
     * 不分页查询资讯类型
     * @param articleType 资讯类型实体
     * @return
     */
    public List<OpArticleType> queryAllArticleType(OpArticleType articleType){
        String whereSql = this.getWhereSql(articleType);
        return this.find(whereSql,0,null);
    }

    /**
     * 保存资讯类型
     * @param articleType 资讯类型实体
     * @return
     */
    public void saveArticleType(OpArticleType articleType){
        if(DataUtil.idIsNotNull(articleType.getId())){
            OpArticleType _articleType = this.findById(articleType.getId());
            _articleType.setTypeName(articleType.getTypeName());
            _articleType.setDepict(articleType.getDepict());
            this.updateById(_articleType,null);
        }else {
            articleType.setStatus(1);
            this.save(articleType);
        }
    }

    /**
     * 删除资讯类型
     * @param articleTypeIds 资讯类型id串
     * @return
     */
    public void deleteArticleType(String articleTypeIds) {
        this.deleteWhereSql(" id in ("+ articleTypeIds +") ");
    }

    /**
     * 根据id查询资讯类型
     * @param articleTypeId 资讯类型id
     * @return
     */
    public OpArticleType findArticleTypeById(BigDecimal articleTypeId){
        return this.findById(articleTypeId);
    }

    /**
     * 根据ids查询资讯类型
     * @param ids 资讯类型id串
     * @return
     */
    public Map<BigDecimal, OpArticleType> findArticleTypeByIds(String ids){
        OpArticleType articleType = new OpArticleType();
        articleType.setIds(ids);
        String whereSql = this.getWhereSql(articleType);
        List<OpArticleType> opArticleTypes = this.find(whereSql, null, null);
        Map<BigDecimal, OpArticleType> map = opArticleTypes.stream().collect(Collectors.toMap(OpArticleType::getId, e -> e));
        return map;
    }

    /**
     * 修改资讯类型状态
     * @param articleTypeIds 资讯类型id串
     * @param status 状态：1.正常 2.禁用 3.删除
     * @return
     */
    public void updateArticleTypeStatusByIds(String articleTypeIds, Integer status){
        OpArticleType articleType = new OpArticleType();
        articleType.setStatus(status);
        this.updateByWhereSql(articleType, " id in ("+ articleTypeIds +")");
    }

    /**
     * sql模板
     * @param articleType 查询条件
     * @return
     */
    private String getWhereSql(OpArticleType articleType) {
        StringBuilder whereSql = new StringBuilder(" 1=1 and status!=3");
        if (ObjectUtils.isNotEmpty(articleType)){
            if (DataUtil.idIsNotNull(articleType.getId())){
                whereSql.append(" and id in (").append(articleType.getId()).append(")");
            }
            if(StringUtils.isNotEmpty(articleType.getIds())){
                whereSql.append(" and id in (").append(articleType.getIds()).append(")");
            }
            if (StringUtils.isNotEmpty(articleType.getDepict())){
                whereSql.append(" and depict like concat('%','").append(articleType.getDepict()).append("','%')");
            }
            if (StringUtils.isNotEmpty(articleType.getTypeName())){
                whereSql.append(" and typeName like concat('%','").append(articleType.getTypeName()).append("','%')");
            }
            if (StringUtils.isNotEmpty(articleType.getStatus())){
                whereSql.append(" and status =").append(articleType.getStatus());
            }
        }
        return whereSql.toString();
    }
}
